import java.util.Scanner;

public class Main {

    //排列问题：
    //递归 ——> 回溯

    // 1 ~ n 的正整数随机打乱，按字典序输出
    // 1 <= n <= 8

    //定义全局变量 ans 用于记录路径，vis 用于标记已使用过的数
    //递归 dfs(int pos,int n)
    //路径的终止条件：pos > n
    //遍历输出
    //记录路径条件：if(vis[i] == 0)进入

    public static int N = 10;
    public static int[] ans = new int[N];
    public static int[] vis = new int[N];
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        dfs(1,n);
    }

    private static void dfs(int pos, int n) {
        //先判断终止条件
        if(pos > n){
            for (int i = 1; i <= n; i++) {
                System.out.print(ans[i] + " ");
            }
            System.out.println();
            return;
        }
        for (int i = 1; i <= n ; i++) {
            if(vis[i] == 0){
                ans[pos] = i;
                vis[i] = 1;
                dfs(pos + 1,n);
                ans[pos] = 0;
                vis[i] = 0;
            }
        }
    }
}
